# ============================================================
# * Copyright © hk. 2022-2025. All rights reserved.
# * File name: CMakeLists.txt
# * Author   : 苏木
# * Date     : 2025-05-22
# * Version  : 
# * Description: cmake version 3.16.3
# ============================================================
## https://cmake.com.cn/cmake/help/latest/guide/tutorial/index.html
## https://cmake.org/cmake/help/latest/

# 指定 CMake 的最低版本要求
# --------------------------------------------------
cmake_minimum_required(VERSION 3.10)


# 设置项目名称和使用的编程语言
# --------------------------------------------------
project(SPROJECT C)


# 指定可执行程序和源文件
# --------------------------------------------------
add_executable(app_demo.out main.c)


# file拷贝
# --------------------------------------------------
# file({COPY | INSTALL} <file>... DESTINATION <dir> [...])
# 将文件、目录和符号链接复制到目标文件夹。
# 复制可以保留输入文件的时间戳，并优化目标文件中具有相同时间戳的文件。
# 除非明确的权限或NO_SOURCE_PERMISSIONS(默认值为USE_SOURCE_PERMISSIONS)，否则复制将保留输入权限。

# 场景1：复制单个文件到构建目录/config
message(STATUS "==> ${CMAKE_VERSION} 复制单个文件到构建目录/config")
file(COPY
    ${CMAKE_SOURCE_DIR}/config.ini
    DESTINATION ${CMAKE_BINARY_DIR}/config
)
message("")

# 场景2：复制多个文件到构建目录/resources
message(STATUS "==> ${CMAKE_VERSION} 复制多个文件到构建目录/resources")
file(COPY
    ${CMAKE_SOURCE_DIR}/images/logo.png
    ${CMAKE_SOURCE_DIR}/docs/README.md
    DESTINATION ${CMAKE_BINARY_DIR}/resources
)
message("")

# 场景3：复制整个目录到构建目录（保留目录结构）
message(STATUS "==> ${CMAKE_VERSION} 复制整个目录到构建目录（保留目录结构）")
file(COPY
    ${CMAKE_SOURCE_DIR}/script
    DESTINATION ${CMAKE_BINARY_DIR}
)
message("")

# 场景4：复制目录内容（不包含目录本身）
message(STATUS "==> ${CMAKE_VERSION} 复制目录内容（不包含目录本身）")
file(COPY
    ${CMAKE_SOURCE_DIR}/templates/
    DESTINATION ${CMAKE_BINARY_DIR}/generated
)
message("")

# 场景5：带权限控制和文件过滤
message(STATUS "==> ${CMAKE_VERSION} 带权限控制和文件过滤")
file(COPY
    ${CMAKE_SOURCE_DIR}/script/
	${CMAKE_SOURCE_DIR}/templates/
    DESTINATION ${CMAKE_BINARY_DIR}/scripts_all
    USE_SOURCE_PERMISSIONS  # 保留原始权限
    FILES_MATCHING
    PATTERN "*.sh"          # 只复制.sh文件
)
message("")
